﻿#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
//定义双向链表中的节点的结构

typedef int LTDataType;
 typedef struct ListNode {

	int data;
	struct ListNode* prev; //往前的指针
	struct ListNode* next; //往后的指针
}LTNode;

 //注意，双向链表是带哨兵位，插入数据之前链表必须要先初始化一个哨兵位
 //void LTInit(LTNode** pphead);
 LTNode* LTInit();
 void LTDesTroy(LTNode** pphead );

 void LTPrint(LTNode* phead);  

 //无需改变哨兵位，则不需要传二级指针
 //如果需要修改哨兵的话，则传入二级指针

  //尾插
 void LTPushBack(LTNode* phead,LTDataType x);
 
 //头插
 void LTPushFront(LTNode* phead,LTDataType x);


 //头删、尾删
 void LTPopBack(LTNode* phead);
 
 void LTPopFront(LTNode* phead);

 //在pos位置之后插⼊数据
 void LTInsert(LTNode* pos, LTDataType x);

 void LTErase(LTNode* pos);

 LTNode* LTFind(LTNode* phead, LTDataType x);